<?php
declare (strict_types=1);

namespace app\api\controller;

use app\api\model\Attribute;
use app\api\model\Goods;
use app\api\model\Spec;
use app\api\model\Spec_value;
use app\api\model\Type;
use think\facade\Db;
use think\Request;

class Types
{
    /**
     * 商品模型列表接口
     * @return \think\response\Json
     */
    public function index()
    {
        $data = Type::getType();
        return success($data);
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param \think\Request $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function read($id)
    {
        $data = Type::getTypeName($id);
        return success($data);
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param int $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param \think\Request $request
     * @param int $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除商品类型接口
     * @param $id
     * @return \think\response\Json
     * @throws \think\exception\PDOException
     */
    public function delete($id)
    {
        // 判断接受的id值
        if (!is_numeric($id) || $id == 0) {
            return fail('id值有误');
        }
        // 查询商品类型下是否有商品
        $data = Goods::getGoods($id);
        if ($data) {
            return fail('此类型下有商品');
        }
        // 开启事务
        Db::startTrans();
        try {
            // 删除商品类型
            Type::delType($id);
            // 删除商品属性
            Attribute::delAttrs($id);
            // 取商品规格id
            $spec_id = Spec::getId($id);
            // 删除商品规格
            Spec::delSpec($id);
            // 删除商品规格值
            Spec_value::delSpecValue($spec_id['id']);
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            return fail($e->getMessage());
        }
        // 删除成功返回结果
        return success('删除成功');
    }
}
